package Data;

import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class FolderData extends FileInfo implements Serializable, DataPort<FileInfo> {
    private String folderNames;
    List<FileInfo> fileInfos=new ArrayList<>();

    /**
     * 初始化文件夹内容
     * @param path
     */
    public FolderData(String path) {
        super(path, 0, DataType.Folder);
        File directory = new File(path);
        if (directory.exists() && directory.isDirectory()) {
            File[] filesAndFolders = directory.listFiles();
            if (filesAndFolders != null) {
                for (File file : filesAndFolders) {
                    System.out.println("文件夹数据类初始化：目前处理的文件夹/文件: " + file.getAbsolutePath());
                    if (file.isFile() && !file.getName().startsWith(".")) {
                        this.fileInfos.add(new FileInfo(file.getAbsolutePath(), file.length(),DataType.File));
                    } else if (file.isDirectory()) {
                        FileInfo fileinfo=new FileInfo(file.getAbsolutePath(), 0, DataType.Folder);
                        this.fileInfos.add(fileinfo);
                    }
                }
            }
        } else {
            System.out.println("指定路径不是一个有效的目录: " + path);
        }
    }
    public FolderData() {}

    /**
     * 获取文件的信息
     *
     * @return
     */
    @Override
    public FileInfo getFileInfo() {
        return new FileInfo(this.getPath(), this.getSize(), this.getDataType());
    }

    /**
     * 获取文件的Index数据
     *
     * @param Index
     * @return
     */
    public FileInfo getIndexData(int Index) {
        if (Index < fileInfos.size()) {
            return fileInfos.get(Index);
        }
        System.out.println("文件夹类：getIndexData函数失败");
        return null;
    }

    /**
     * 获取文件的Index范围数据
     *
     * @param Indexs
     * @return
     */
    @Override
    public List<FileInfo> getIndexsData(int[] Indexs) {
        if (Indexs != null) {
            List<FileInfo> result = new ArrayList<>();
            for (int index : Indexs) {
                if (index < fileInfos.size()) {
                    result.add(fileInfos.get(index));
                }
            }
            return result;
        }
        System.out.println("文件夹类：getIndexsData函数失败");
        return null;
    }

    /**
     * 获取文件的全部数据
     *
     * @return
     */
    @Override
    public List<FileInfo> getAllData() {
        if (fileInfos != null) {
            return fileInfos;
        }
        System.out.println("文件夹类：getAllData函数失败");
        return null;
    }

    @Override
    public String toString() {
        return "文件夹类：文件名字为："+this.getPath();
    }
}
